<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta content="text/xhtml;charset=utf-8" http-equiv="Content-Type"/>
<meta content="IE=9" http-equiv="X-UA-Compatible"/>
<meta content="Doxygen 1.8.13" name="generator"/>
<title>OpenCV: cv::ppf_match_3d::PPF3DDetector Class Reference</title>
<link href="../../opencv.ico" rel="shortcut icon" type="image/x-icon"/>
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script src="../../jquery.js" type="text/javascript"></script>
<script src="../../dynsections.js" type="text/javascript"></script>
<script src="../../tutorial-utils.js" type="text/javascript"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script src="../../search/searchdata.js" type="text/javascript"></script>
<script src="../../search/search.js" type="text/javascript"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
//<![CDATA[
MathJax.Hub.Config(
{
  TeX: {
      Macros: {
          matTT: [ "\\[ \\left|\\begin{array}{ccc} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{array}\\right| \\]", 9],
          fork: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ \\end{array} \\right.", 4],
          forkthree: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ \\end{array} \\right.", 6],
          forkfour: ["\\left\\{ \\begin{array}{l l} #1 & \\mbox{#2}\\\\ #3 & \\mbox{#4}\\\\ #5 & \\mbox{#6}\\\\ #7 & \\mbox{#8}\\\\ \\end{array} \\right.", 8],
          vecthree: ["\\begin{bmatrix} #1\\\\ #2\\\\ #3 \\end{bmatrix}", 3],
          vecthreethree: ["\\begin{bmatrix} #1 & #2 & #3\\\\ #4 & #5 & #6\\\\ #7 & #8 & #9 \\end{bmatrix}", 9],
          cameramatrix: ["#1 = \\begin{bmatrix} f_x & 0 & c_x\\\\ 0 & f_y & c_y\\\\ 0 & 0 & 1 \\end{bmatrix}", 1],
          distcoeffs: ["(k_1, k_2, p_1, p_2[, k_3[, k_4, k_5, k_6 [, s_1, s_2, s_3, s_4[, \\tau_x, \\tau_y]]]]) \\text{ of 4, 5, 8, 12 or 14 elements}"],
          distcoeffsfisheye: ["(k_1, k_2, k_3, k_4)"],
          hdotsfor: ["\\dots", 1],
          mathbbm: ["\\mathbb{#1}", 1],
          bordermatrix: ["\\matrix{#1}", 1]
      }
  }
}
);
//]]>
</script><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js" type="text/javascript"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css"/>
<link href="../../stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<!--#include virtual="/google-search.html"-->
<table cellpadding="0" cellspacing="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="../../opencv-logo-small.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">OpenCV
    <span id="projectnumber">4.5.2</span>
   </div>
   <div id="projectbrief">Open Source Computer Vision</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search",false,'Search');
</script>
<script src="../../menudata.js" type="text/javascript"></script>
<script src="../../menu.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
  initMenu('../../',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow" onkeydown="return searchBox.OnSearchSelectKey(event)" onmouseout="return searchBox.OnSearchSelectHide()" onmouseover="return searchBox.OnSearchSelectShow()">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe frameborder="0" id="MSearchResults" name="MSearchResults" src="javascript:void(0)">
</iframe>
</div>
<div class="navpath" id="nav-path">
  <ul>
<li class="navelem"><a class="el" href="../../d2/d75/namespacecv.html">cv</a></li><li class="navelem"><a class="el" href="../../d0/de6/namespacecv_1_1ppf__match__3d.html">ppf_match_3d</a></li><li class="navelem"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html">PPF3DDetector</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> |
<a href="#pro-methods">Protected Member Functions</a> |
<a href="#pro-attribs">Protected Attributes</a> |
<a href="../../d0/d28/classcv_1_1ppf__match__3d_1_1PPF3DDetector-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">cv::ppf_match_3d::PPF3DDetector Class Reference<div class="ingroups"><a class="el" href="../../d9/d25/group__surface__matching.html">Surface Matching</a></div></div>  </div>
</div><!--header-->
<div class="contents">
<p>Class, allowing the load and matching 3D models. Typical Use:  
 <a href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#details">More...</a></p>
<p><code>#include &lt;opencv2/surface_matching/ppf_match_3d.hpp&gt;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:abe2433c0b4eb9be6506172aeccdd534e"><td align="right" class="memItemLeft" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#abe2433c0b4eb9be6506172aeccdd534e">PPF3DDetector</a> ()</td></tr>
<tr class="memdesc:abe2433c0b4eb9be6506172aeccdd534e"><td class="mdescLeft"> </td><td class="mdescRight">Empty constructor. Sets default arguments.  <a href="#abe2433c0b4eb9be6506172aeccdd534e">More...</a><br/></td></tr>
<tr class="separator:abe2433c0b4eb9be6506172aeccdd534e"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a10173afac3cb9d9fe99e11e0d4d56f81"><td align="right" class="memItemLeft" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a10173afac3cb9d9fe99e11e0d4d56f81">PPF3DDetector</a> (const double relativeSamplingStep, const double relativeDistanceStep=0.05, const double numAngles=30)</td></tr>
<tr class="separator:a10173afac3cb9d9fe99e11e0d4d56f81"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aa39fca5af6b36af6d0dd6fb9573a0887"><td align="right" class="memItemLeft" valign="top">virtual </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#aa39fca5af6b36af6d0dd6fb9573a0887">~PPF3DDetector</a> ()</td></tr>
<tr class="separator:aa39fca5af6b36af6d0dd6fb9573a0887"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a13757c035f9c95841f7f14f6170c8ffc"><td align="right" class="memItemLeft" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a13757c035f9c95841f7f14f6170c8ffc">match</a> (const <a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> &amp;scene, std::vector&lt; <a class="el" href="../../d9/d25/group__surface__matching.html#gaace349a5dbee5aa24dd68d8f57518902">Pose3DPtr</a> &gt; &amp;results, const double relativeSceneSampleStep=1.0/5.0, const double relativeSceneDistance=0.03)</td></tr>
<tr class="memdesc:a13757c035f9c95841f7f14f6170c8ffc"><td class="mdescLeft"> </td><td class="mdescRight">Matches a trained model across a provided scene.  <a href="#a13757c035f9c95841f7f14f6170c8ffc">More...</a><br/></td></tr>
<tr class="separator:a13757c035f9c95841f7f14f6170c8ffc"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a93659b6edcc1c48566e8170d771a097f"><td align="right" class="memItemLeft" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a93659b6edcc1c48566e8170d771a097f">read</a> (const <a class="el" href="../../de/dd9/classcv_1_1FileNode.html">FileNode</a> &amp;fn)</td></tr>
<tr class="separator:a93659b6edcc1c48566e8170d771a097f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad6ee0fb868c7b97bb967f0ccb7ed1e1b"><td align="right" class="memItemLeft" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#ad6ee0fb868c7b97bb967f0ccb7ed1e1b">setSearchParams</a> (const double positionThreshold=-1, const double rotationThreshold=-1, const bool useWeightedClustering=false)</td></tr>
<tr class="separator:ad6ee0fb868c7b97bb967f0ccb7ed1e1b"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:acd125802f8339b1ecb67316318a4670d"><td align="right" class="memItemLeft" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#acd125802f8339b1ecb67316318a4670d">trainModel</a> (const <a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> &amp;Model)</td></tr>
<tr class="memdesc:acd125802f8339b1ecb67316318a4670d"><td class="mdescLeft"> </td><td class="mdescRight">Trains a new model.  <a href="#acd125802f8339b1ecb67316318a4670d">More...</a><br/></td></tr>
<tr class="separator:acd125802f8339b1ecb67316318a4670d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a6ca674fac252493b7f7c482fe9459d28"><td align="right" class="memItemLeft" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a6ca674fac252493b7f7c482fe9459d28">write</a> (<a class="el" href="../../da/d56/classcv_1_1FileStorage.html">FileStorage</a> &amp;fs) const</td></tr>
<tr class="separator:a6ca674fac252493b7f7c482fe9459d28"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a3fbd9d01c645212a35dc885ca3100fc7"><td align="right" class="memItemLeft" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a3fbd9d01c645212a35dc885ca3100fc7">clearTrainingModels</a> ()</td></tr>
<tr class="separator:a3fbd9d01c645212a35dc885ca3100fc7"><td class="memSeparator" colspan="2"> </td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:af9e47c5d420dfe5f53eb6a615222d9ca"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#af9e47c5d420dfe5f53eb6a615222d9ca">angle_step</a></td></tr>
<tr class="separator:af9e47c5d420dfe5f53eb6a615222d9ca"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:aac17f71a9392d3152a57b5c59ec29b2c"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#aac17f71a9392d3152a57b5c59ec29b2c">angle_step_radians</a></td></tr>
<tr class="separator:aac17f71a9392d3152a57b5c59ec29b2c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad5329f040b31639cb47c32fd7bdd5cb7"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#ad5329f040b31639cb47c32fd7bdd5cb7">angle_step_relative</a></td></tr>
<tr class="separator:ad5329f040b31639cb47c32fd7bdd5cb7"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:adc99cacce649ea3873e1fcd7899fdad3"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#adc99cacce649ea3873e1fcd7899fdad3">distance_step</a></td></tr>
<tr class="separator:adc99cacce649ea3873e1fcd7899fdad3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a41e7a6097f05bf724c9fccc771d228f2"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a41e7a6097f05bf724c9fccc771d228f2">distance_step_relative</a></td></tr>
<tr class="separator:a41e7a6097f05bf724c9fccc771d228f2"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a9ec82f688111c95a5447ba04c3d4e391"><td align="right" class="memItemLeft" valign="top"><a class="el" href="../../da/dff/structTHash.html">THash</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a9ec82f688111c95a5447ba04c3d4e391">hash_nodes</a></td></tr>
<tr class="separator:a9ec82f688111c95a5447ba04c3d4e391"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:ad4dc582d4b5a998aa6f66c82f0fbd90d"><td align="right" class="memItemLeft" valign="top"><a class="el" href="../../d9/d8b/structhashtable__int.html">hashtable_int</a> * </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#ad4dc582d4b5a998aa6f66c82f0fbd90d">hash_table</a></td></tr>
<tr class="separator:ad4dc582d4b5a998aa6f66c82f0fbd90d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a5aa5adb0a18007b213fb09852f24687c"><td align="right" class="memItemLeft" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a5aa5adb0a18007b213fb09852f24687c">num_ref_points</a></td></tr>
<tr class="separator:a5aa5adb0a18007b213fb09852f24687c"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a7b87b6bec0033ccb112f1ea211be2e1f"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a7b87b6bec0033ccb112f1ea211be2e1f">position_threshold</a></td></tr>
<tr class="separator:a7b87b6bec0033ccb112f1ea211be2e1f"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a104f79f2f9f2d9b4e6b7f9c1c107f395"><td align="right" class="memItemLeft" valign="top"><a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a104f79f2f9f2d9b4e6b7f9c1c107f395">ppf</a></td></tr>
<tr class="separator:a104f79f2f9f2d9b4e6b7f9c1c107f395"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a09b1cfb0c4e300bef45d0315e7160685"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a09b1cfb0c4e300bef45d0315e7160685">rotation_threshold</a></td></tr>
<tr class="separator:a09b1cfb0c4e300bef45d0315e7160685"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a3e71be57a3b21bd7bcdc64debfa28c7d"><td align="right" class="memItemLeft" valign="top"><a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a3e71be57a3b21bd7bcdc64debfa28c7d">sampled_pc</a></td></tr>
<tr class="separator:a3e71be57a3b21bd7bcdc64debfa28c7d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a630b7c9cbd80d76839b3c3e0963c7fb3"><td align="right" class="memItemLeft" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a630b7c9cbd80d76839b3c3e0963c7fb3">sampling_step_relative</a></td></tr>
<tr class="separator:a630b7c9cbd80d76839b3c3e0963c7fb3"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a78629ddfb88fad7b33dd422ad7e4694d"><td align="right" class="memItemLeft" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a78629ddfb88fad7b33dd422ad7e4694d">scene_sample_step</a></td></tr>
<tr class="separator:a78629ddfb88fad7b33dd422ad7e4694d"><td class="memSeparator" colspan="2"> </td></tr>
<tr class="memitem:a731f876eadfe492624ab890f1ecea682"><td align="right" class="memItemLeft" valign="top">bool </td><td class="memItemRight" valign="bottom"><a class="el" href="../../db/d25/classcv_1_1ppf__match__3d_1_1PPF3DDetector.html#a731f876eadfe492624ab890f1ecea682">use_weighted_avg</a></td></tr>
<tr class="separator:a731f876eadfe492624ab890f1ecea682"><td class="memSeparator" colspan="2"> </td></tr>
</table>
<a id="details" name="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Class, allowing the load and matching 3D models. Typical Use: </p>
<div class="fragment"><div class="line"><span class="comment">// Train a model</span></div><div class="line">ppf_match_3d::PPF3DDetector detector(0.05, 0.05);</div><div class="line">detector.trainModel(<a class="code" href="../../d2/d75/namespacecv.html#a172ccaaba996db5201af1c17c04a5fe8a5c598dc317cfe6ac99afeaeed18454c7">pc</a>);</div><div class="line"><span class="comment">// Search the model in a given scene</span></div><div class="line">vector&lt;Pose3DPtr&gt; results;</div><div class="line">detector.match(pcTest, results, 1.0/5.0,0.05);</div></div><!-- fragment --> </div><h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="abe2433c0b4eb9be6506172aeccdd534e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#abe2433c0b4eb9be6506172aeccdd534e">◆ </a></span>PPF3DDetector() <span class="overload">[1/2]</span></h2>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">cv::ppf_match_3d::PPF3DDetector::PPF3DDetector </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table><table class="python_language"><tr><th colspan="999" style="text-align:left">Python:</th></tr><tr><td style="width: 20px;"></td><td>&lt;ppf_match_3d_PPF3DDetector object&gt;</td><td>=</td><td>cv.ppf_match_3d_PPF3DDetector(</td><td class="paramname"></td><td>)</td></tr><tr><td style="width: 20px;"></td><td>&lt;ppf_match_3d_PPF3DDetector object&gt;</td><td>=</td><td>cv.ppf_match_3d_PPF3DDetector(</td><td class="paramname">relativeSamplingStep[, relativeDistanceStep[, numAngles]]</td><td>)</td></tr></table>
</div><div class="memdoc">
<p>Empty constructor. Sets default arguments. </p>
</div>
</div>
<a id="a10173afac3cb9d9fe99e11e0d4d56f81"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a10173afac3cb9d9fe99e11e0d4d56f81">◆ </a></span>PPF3DDetector() <span class="overload">[2/2]</span></h2>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">cv::ppf_match_3d::PPF3DDetector::PPF3DDetector </td>
          <td>(</td>
          <td class="paramtype">const double </td>
          <td class="paramname"><em>relativeSamplingStep</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double </td>
          <td class="paramname"><em>relativeDistanceStep</em> = <code>0.05</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double </td>
          <td class="paramname"><em>numAngles</em> = <code>30</code> </td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table><table class="python_language"><tr><th colspan="999" style="text-align:left">Python:</th></tr><tr><td style="width: 20px;"></td><td>&lt;ppf_match_3d_PPF3DDetector object&gt;</td><td>=</td><td>cv.ppf_match_3d_PPF3DDetector(</td><td class="paramname"></td><td>)</td></tr><tr><td style="width: 20px;"></td><td>&lt;ppf_match_3d_PPF3DDetector object&gt;</td><td>=</td><td>cv.ppf_match_3d_PPF3DDetector(</td><td class="paramname">relativeSamplingStep[, relativeDistanceStep[, numAngles]]</td><td>)</td></tr></table>
</div><div class="memdoc">
<p>Constructor with arguments </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">relativeSamplingStep</td><td>Sampling distance relative to the object's diameter. Models are first sampled uniformly in order to improve efficiency. Decreasing this value leads to a denser model, and a more accurate pose estimation but the larger the model, the slower the training. Increasing the value leads to a less accurate pose computation but a smaller model and faster model generation and matching. Beware of the memory consumption when using small values. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">relativeDistanceStep</td><td>The discretization distance of the point pair distance relative to the model's diameter. This value has a direct impact on the hashtable. Using small values would lead to too fine discretization, and thus ambiguity in the bins of hashtable. Too large values would lead to no discrimination over the feature vectors and different point pair features would be assigned to the same bin. This argument defaults to the value of RelativeSamplingStep. For noisy scenes, the value can be increased to improve the robustness of the matching against noisy points. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">numAngles</td><td>Set the discretization of the point pair orientation as the number of subdivisions of the angle. This value is the equivalent of RelativeDistanceStep for the orientations. Increasing the value increases the precision of the matching but decreases the robustness against incorrect normal directions. Decreasing the value decreases the precision of the matching but increases the robustness against incorrect normal directions. For very noisy scenes where the normal directions can not be computed accurately, the value can be set to 25 or 20. </td></tr>
  </table>
  </dd>
</dl>
</div>
</div>
<a id="aa39fca5af6b36af6d0dd6fb9573a0887"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa39fca5af6b36af6d0dd6fb9573a0887">◆ </a></span>~PPF3DDetector()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual cv::ppf_match_3d::PPF3DDetector::~PPF3DDetector </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="a3fbd9d01c645212a35dc885ca3100fc7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3fbd9d01c645212a35dc885ca3100fc7">◆ </a></span>clearTrainingModels()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void cv::ppf_match_3d::PPF3DDetector::clearTrainingModels </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a13757c035f9c95841f7f14f6170c8ffc"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a13757c035f9c95841f7f14f6170c8ffc">◆ </a></span>match()</h2>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cv::ppf_match_3d::PPF3DDetector::match </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> &amp; </td>
          <td class="paramname"><em>scene</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">std::vector&lt; <a class="el" href="../../d9/d25/group__surface__matching.html#gaace349a5dbee5aa24dd68d8f57518902">Pose3DPtr</a> &gt; &amp; </td>
          <td class="paramname"><em>results</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double </td>
          <td class="paramname"><em>relativeSceneSampleStep</em> = <code>1.0/5.0</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double </td>
          <td class="paramname"><em>relativeSceneDistance</em> = <code>0.03</code> </td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table><table class="python_language"><tr><th colspan="999" style="text-align:left">Python:</th></tr><tr><td style="width: 20px;"></td><td>results</td><td>=</td><td>cv.ppf_match_3d_PPF3DDetector.match(</td><td class="paramname">scene[, relativeSceneSampleStep[, relativeSceneDistance]]</td><td>)</td></tr></table>
</div><div class="memdoc">
<p>Matches a trained model across a provided scene. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">scene</td><td>Point cloud for the scene </td></tr>
    <tr><td class="paramdir">[out]</td><td class="paramname">results</td><td>List of output poses </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">relativeSceneSampleStep</td><td>The ratio of scene points to be used for the matching after sampling with relativeSceneDistance. For example, if this value is set to 1.0/5.0, every 5th point from the scene is used for pose estimation. This parameter allows an easy trade-off between speed and accuracy of the matching. Increasing the value leads to less points being used and in turn to a faster but less accurate pose computation. Decreasing the value has the inverse effect. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">relativeSceneDistance</td><td>Set the distance threshold relative to the diameter of the model. This parameter is equivalent to relativeSamplingStep in the training stage. This parameter acts like a prior sampling with the relativeSceneSampleStep parameter. </td></tr>
  </table>
  </dd>
</dl>
</div>
</div>
<a id="a93659b6edcc1c48566e8170d771a097f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a93659b6edcc1c48566e8170d771a097f">◆ </a></span>read()</h2>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cv::ppf_match_3d::PPF3DDetector::read </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="../../de/dd9/classcv_1_1FileNode.html">FileNode</a> &amp; </td>
          <td class="paramname"><em>fn</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
</div>
</div>
<a id="ad6ee0fb868c7b97bb967f0ccb7ed1e1b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad6ee0fb868c7b97bb967f0ccb7ed1e1b">◆ </a></span>setSearchParams()</h2>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cv::ppf_match_3d::PPF3DDetector::setSearchParams </td>
          <td>(</td>
          <td class="paramtype">const double </td>
          <td class="paramname"><em>positionThreshold</em> = <code>-1</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const double </td>
          <td class="paramname"><em>rotationThreshold</em> = <code>-1</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const bool </td>
          <td class="paramname"><em>useWeightedClustering</em> = <code>false</code> </td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>Set the parameters for the search </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">positionThreshold</td><td>Position threshold controlling the similarity of translations. Depends on the units of calibration/model. </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">rotationThreshold</td><td>Position threshold controlling the similarity of rotations. This parameter can be perceived as a threshold over the difference of angles </td></tr>
    <tr><td class="paramdir">[in]</td><td class="paramname">useWeightedClustering</td><td>The algorithm by default clusters the poses without weighting. A non-zero value would indicate that the pose clustering should take into account the number of votes as the weights and perform a weighted averaging instead of a simple one. </td></tr>
  </table>
  </dd>
</dl>
</div>
</div>
<a id="acd125802f8339b1ecb67316318a4670d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#acd125802f8339b1ecb67316318a4670d">◆ </a></span>trainModel()</h2>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cv::ppf_match_3d::PPF3DDetector::trainModel </td>
          <td>(</td>
          <td class="paramtype">const <a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> &amp; </td>
          <td class="paramname"><em>Model</em></td><td>)</td>
          <td></td>
        </tr>
      </table><table class="python_language"><tr><th colspan="999" style="text-align:left">Python:</th></tr><tr><td style="width: 20px;"></td><td>None</td><td>=</td><td>cv.ppf_match_3d_PPF3DDetector.trainModel(</td><td class="paramname">Model</td><td>)</td></tr></table>
</div><div class="memdoc">
<p>Trains a new model. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramdir">[in]</td><td class="paramname">Model</td><td>The input point cloud with normals (Nx6)</td></tr>
  </table>
  </dd>
</dl>
<p>Uses the parameters set in the constructor to downsample and learn a new model. When the model is learnt, the instance gets ready for calling "match". </p>
</div>
</div>
<a id="a6ca674fac252493b7f7c482fe9459d28"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6ca674fac252493b7f7c482fe9459d28">◆ </a></span>write()</h2>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void cv::ppf_match_3d::PPF3DDetector::write </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="../../da/d56/classcv_1_1FileStorage.html">FileStorage</a> &amp; </td>
          <td class="paramname"><em>fs</em></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="af9e47c5d420dfe5f53eb6a615222d9ca"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af9e47c5d420dfe5f53eb6a615222d9ca">◆ </a></span>angle_step</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::angle_step</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aac17f71a9392d3152a57b5c59ec29b2c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aac17f71a9392d3152a57b5c59ec29b2c">◆ </a></span>angle_step_radians</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::angle_step_radians</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ad5329f040b31639cb47c32fd7bdd5cb7"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad5329f040b31639cb47c32fd7bdd5cb7">◆ </a></span>angle_step_relative</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::angle_step_relative</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="adc99cacce649ea3873e1fcd7899fdad3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#adc99cacce649ea3873e1fcd7899fdad3">◆ </a></span>distance_step</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::distance_step</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a41e7a6097f05bf724c9fccc771d228f2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a41e7a6097f05bf724c9fccc771d228f2">◆ </a></span>distance_step_relative</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::distance_step_relative</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a9ec82f688111c95a5447ba04c3d4e391"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a9ec82f688111c95a5447ba04c3d4e391">◆ </a></span>hash_nodes</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="../../da/dff/structTHash.html">THash</a>* cv::ppf_match_3d::PPF3DDetector::hash_nodes</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="ad4dc582d4b5a998aa6f66c82f0fbd90d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad4dc582d4b5a998aa6f66c82f0fbd90d">◆ </a></span>hash_table</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="../../d9/d8b/structhashtable__int.html">hashtable_int</a>* cv::ppf_match_3d::PPF3DDetector::hash_table</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a5aa5adb0a18007b213fb09852f24687c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5aa5adb0a18007b213fb09852f24687c">◆ </a></span>num_ref_points</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int cv::ppf_match_3d::PPF3DDetector::num_ref_points</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7b87b6bec0033ccb112f1ea211be2e1f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7b87b6bec0033ccb112f1ea211be2e1f">◆ </a></span>position_threshold</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::position_threshold</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a104f79f2f9f2d9b4e6b7f9c1c107f395"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a104f79f2f9f2d9b4e6b7f9c1c107f395">◆ </a></span>ppf</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> cv::ppf_match_3d::PPF3DDetector::ppf</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a09b1cfb0c4e300bef45d0315e7160685"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09b1cfb0c4e300bef45d0315e7160685">◆ </a></span>rotation_threshold</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::rotation_threshold</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a3e71be57a3b21bd7bcdc64debfa28c7d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a3e71be57a3b21bd7bcdc64debfa28c7d">◆ </a></span>sampled_pc</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="../../d3/d63/classcv_1_1Mat.html">Mat</a> cv::ppf_match_3d::PPF3DDetector::sampled_pc</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a630b7c9cbd80d76839b3c3e0963c7fb3"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a630b7c9cbd80d76839b3c3e0963c7fb3">◆ </a></span>sampling_step_relative</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">double cv::ppf_match_3d::PPF3DDetector::sampling_step_relative</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a78629ddfb88fad7b33dd422ad7e4694d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a78629ddfb88fad7b33dd422ad7e4694d">◆ </a></span>scene_sample_step</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">int cv::ppf_match_3d::PPF3DDetector::scene_sample_step</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a731f876eadfe492624ab890f1ecea682"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a731f876eadfe492624ab890f1ecea682">◆ </a></span>use_weighted_avg</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool cv::ppf_match_3d::PPF3DDetector::use_weighted_avg</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>opencv2/surface_matching/<a class="el" href="../../d5/d52/ppf__match__3d_8hpp.html">ppf_match_3d.hpp</a></li>
</ul>
</div><!-- contents -->
<!-- HTML footer for doxygen 1.8.6-->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Fri Apr 2 2021 11:36:48 for OpenCV by  <a href="http://www.doxygen.org/index.html">
<img alt="doxygen" class="footer" src="../../doxygen.png"/>
</a> 1.8.13
</small></address>
<script type="text/javascript">
//<![CDATA[
addTutorialsButtons();
//]]>
</script>
</body>
</html>
